单例模式

  • 单例模式的定义:

    • 单例模式,顾名思义,就是只能实例化一次。单例模式的核心思想就是 : 在该实例 不存在 的情况下,可以通过一个方法创建一个类实现 创建 类的新实例;如果实例已经 存在 ,它会简单返回该对象的
      引用请看下面的代码 :

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      let mySingleton = (function () {
      let instance;

      function init () {
      console.log ( '我是初始化方法' );

      function privateMethod () {
      console.log ( '我是初始化的私有方法' );
      }

      let priviteVariable = '我是初始化的私有变量';
      let privateRandom = (Math.random () * 10).toFixed(2); // 我是初始化的私有变量,生成随机数
      return {
      publicMethod: function () {
      console.log ( '我是初始化方法的公有方法' );
      },
      publicProperty: '我是初始化方法的公有属性',
      getNumber: function () { //我是初始化方法的公有方法
      return privateRandom; // 初始化公有方法调用初始化私有方法
      }
      };
      };
      return {
      getInstance: function () {
      if ( !instance ) { // 判断instance是否存在,如果不存在,让instance 引用 init();
      instance = init ();
      }
      return instance;
      }
      };
      }) ();

      let singleA = mySingleton.getInstance ().getNumber()
      let singleB = mySingleton.getInstance ().getNumber()

      console.log ('singleA的值为:'+singleA,',singleB的值为'+ singleB,singleA === singleB ); //输出为: true
    • 上面代码的输出结果为 true,验证了如果实例已经 存在 ,它会简单返回该对象的引用。那如果不引用呢?是不是每次实例化都返回不同的随机数呢?我们验证一下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      let mySingleton = (function () {
      let instance;

      function init () {
      console.log ( '我是初始化方法' );

      function privateMethod () {
      console.log ( '我是初始化的私有方法' );
      }

      let priviteVariable = '我是初始化的私有变量';
      let privateRandom = (Math.random () * 10).toFixed(2); // 我是初始化的私有变量,生成随机数
      return {
      publicMethod: function () {
      console.log ( '我是初始化方法的公有方法' );
      },
      publicProperty: '我是初始化方法的公有属性',
      getNumber: function () { //我是初始化方法的公有方法
      return privateRandom; // 初始化公有方法调用初始化私有方法
      }
      };
      };
      return {
      getInstance: function () {
      instance = init ();// 这里我们不判断instance,则每次都会实例化instance;
      return instance;
      }
      };
      }) ();

      let singleA = mySingleton.getInstance ().getNumber()
      let singleB = mySingleton.getInstance ().getNumber()

      console.log ( singleA === singleB ); // false

      以上就是Javascript的单例模式.

文章目录